iT邦幫忙

2023 iThome 鐵人賽

DAY 5
0

TCP (Transmission Control Protocol,傳輸控制協議),位於傳輸層的協議,它是一種可以保證你資料安全傳輸的協議,建立安全的連線、保證資料不丟失、按照正確的順序抵達接收端,並且具有內建的錯誤偵測和修復功能

TCP 將傳輸資料的流程分為以下三個步驟:

  • 建立連線 (Connection Establishment)
  • 傳輸資料 (Data Transfer)
  • 切斷連線 (Connection Termination)

建立連線

三次握手

在第一步建立連線時,會檢查傳送端和接收端之間是否可以正常通訊,建立連線的確認過程會經過三次確認的動作,稱為三次握手(Three-Way Handshake),其步驟如下:

  1. 傳送端向接收端傳送一個SYN (Synchronize Sequence Numbers,同步序列號)封包,表明希望建立連線,SYN 封包內容包含一個隨機生成的初始序號(ISN),以及TCP 的一些控制訊息。
  2. 接收端收到SYN 封包後,回應一個SYN-ACK 封包,確認連線的建立,SYN-ACK 封包內容包含傳送端的ISN 以及ACK(Acknowledge Field Significant,確認號),用於確認傳送端的SYN
  3. 傳送端收到接收端的SYN-ACK 封包後,再傳送一個ACK 封包,表明已經建立連線,確認接收端的SYN;此時,傳送端和接收端雙方都已經確認對方的SYN,TCP 連線已經建立完畢,可以開始進行資料傳輸。

傳輸資料

應用程式協議表頭

在資料開始傳輸前,會先在資料上附加應用程式協議表頭,形成訊息(Message),如應用程式協議為HTTP,資料上附加HTTP 表頭,形成HTTP 訊息。

資料分割

當傳輸資料量過大時,TCP 協議也會將訊息分解至適當大小,分割的單位為MSS (Maximun Segment Size,最大區段大小),MSS 的標準大小為1460位元,超過這個大小的訊息就會被分割成多個以MSS 為單位的資料,稱為區段(Segment)

TCP 表頭

透過TCP 進行傳輸的區段上會附加TCP 表頭,形成TCP 區段,其內容包含傳送端和接收端的連接埠號、資料序號、ACK 編號等。

  • 連接埠號,用於辨識正確的應用程式並指派資料。
  • 資料序號,傳輸資料量過大時會分解資料成區段並為其編號,序號便是提供給接收端,以便其按照順序組裝資料。
  • ACK (Acknowledge)編號,用來確認資料是否被正常接收,並再次傳送未被接收的資料。

流量控制和雍塞控制

TCP 具有內建的流量控制和雍塞控制機制,用來確保通訊的穩定性和效率。

  • 流量控制

    透過滑動窗口(Sliding Window)來實現流量控制,接收端會告訴傳送端它的緩衝區還有多少可用空間,避免過多的資料塞滿緩衝區。

  • 雍塞控制

    透過監控網路的狀態和調節資料流的速率,避免過度雍塞網路。


切斷連線

四次揮手

當資料傳輸完畢時,傳送端和接收端必須正確地切斷連線,切斷連線的過程會有四次確認的動作,稱為四次揮手(Four-Way Handshake),其步驟如下:

  1. 傳送端向接收端傳送一個FIN (結束)封包,表示它已經完成資料傳輸,但仍然保持通訊。
  2. 接收端在收到FIN 封包後,回應一個ACK 封包,確認接收到FIN 封包。
  3. 當接收端也完成資料傳輸工作時,它會向傳送端傳送一個FIN 封包。
  4. 傳送端收到接收端的FIN 封包後,回應一個ACK 封包,表示確認收到FIN 封包;至此,連線正確地切斷。

小結

TCP 協議讀起來是比較簡單一些,除了【三次握手】、【四次揮手】外,還有【對資料進行切割並編號】,這些都是很好的記憶點,當然還是要強調一下,這篇只有介紹一些比較耳熟能詳的部分,細節的內容還是要去買書回來看才比較了解。

不過下一篇IP 協議的內容就多很多了,完全沒想到一個IP 位址有那麼多技術支持。

/images/emoticon/emoticon06.gif


參考資料

鳥哥私房菜 - 第二章、基礎網路概念

網際網路協議套組 - 維基百科,自由的百科全書

傳輸控制協定 - 維基百科,自由的百科全書

圖解網路的運作機制

圖解TCP/IP網路通訊協定(涵蓋IPv6)2021修訂版


上一篇
Day 4 - TCP/IP Model
下一篇
Day 6 - IP (網際網路協議)
系列文
後端工程師學習地圖導覽11
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言